package es.cea.biblioteca;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AdminLibrosGServlet
 */
public class AdminLibrosGServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter writer=response.getWriter();
		
		writer.println("<html><head><title>Biblioteca - Gestion de libros</title>"+
		"<h2>Gestion de libros</h2><br/>");
		
		//recojo lista de autores, de generos y de libros de la aplicacion
		List<Autor> listaAutores=(List<Autor>) request.getSession().getServletContext().getAttribute(AtributosConstantes.listaAutores.toString());		
		List<Genero> listaGeneros=(List<Genero>) request.getSession().getServletContext().getAttribute(AtributosConstantes.listaGeneros.toString());		
		List<Libro> listaLibros=(List<Libro>) request.getSession().getServletContext().getAttribute(AtributosConstantes.listaLibros.toString());
		
		
		//si no recibo parametros por GET muestro formulario para nuevo libro
		if(request.getParameter("ref")==null && request.getParameter("accion").equals("nuevo")){
			writer.println("<form action='./adminLibrosG?accion=guardar' method='post'>"+
					"Referencia: <input name='referencia' type='text'/><br/>"+
					"Autor: <select name='autor'>");
					for(Autor a:listaAutores){
						writer.println("<option value='"+a.nombre+"'>"+a.nombre+"</option>");
					}
					writer.println("</select><br/>Titulo: <input name='titulo' type='text'/><br/>Genero: <select name='genero'>");
					for(Genero g:listaGeneros){
						writer.println("<option value='"+g.nombre+"'>"+g.nombre+"</option>");
					}					
					writer.println("</select><br/>Fecha de publicacion: <input name='fechapublicacion' type='text'/><br/>"+
					" <input type='submit' value='Enviar' /></form><br/>"+
					"<a href='./adminLibros'>Volver</a>");			
		}
		
		//si recibo el parametro ref y el parametro accion como "modificar" es para guardar 
		if(request.getParameter("ref")!=null && request.getParameter("accion").equals("modificar")){
			//busco el libro a modificar en la lista			
			Libro lib=Utilidades.buscarLibro(request.getParameter("ref"),listaLibros);
			
			writer.println("<form action='./adminLibrosG?ref="+request.getParameter("ref")+"&accion=guardar' method='post'>"+
					"Referencia: <input name='referencia' type='text' value='"+lib.referencia+"'/><br/>"+
					"Autor: <select name='autor'> <option value='"+lib.autor.nombre+"'>"+lib.autor.nombre+"</option>");					
					for(Autor a:listaAutores){
						writer.println("<option value='"+a.nombre+"'>"+a.nombre+"</option>");
					}
					writer.println("</select><br/>Titulo: <input name='titulo' type='text' value='"+lib.titulo+"'/><br/>Genero: <select name='genero'> <option value='"+lib.genero.nombre+"'>"+lib.genero.nombre+"</option>");
					for(Genero g:listaGeneros){
						writer.println("<option value='"+g.nombre+"'>"+g.nombre+"</option>");
					}					
					writer.println("</select><br/>Fecha de publicacion: <input name='fechapublicacion' type='text' value='"+lib.fechaPublicacion+"'/><br/>"+
					" <input type='submit' value='Enviar' /></form><br/>"+
					"<a href='./adminLibros'>Volver</a>");					
		}
		
		//si recibo como accion "guardar" sin referencia es guardar uno nuevo
		if(request.getParameter("accion").equals("guardar") && request.getParameter("ref")==null){
			Autor aut=new Autor(request.getParameter("autor"));
			Genero gen=new Genero(request.getParameter("genero"));
			Libro lib=new Libro(request.getParameter("referencia"),aut,request.getParameter("titulo"),gen,request.getParameter("fechapublicacion"));
			
			listaLibros.add(lib);
			request.getSession().getServletContext().setAttribute(AtributosConstantes.listaLibros.toString(), listaLibros);
			
			request.getRequestDispatcher("./adminLibros").forward(request, response);
		}
		
		//si recibo como accion "guardar" y una referencia es modificar un libro
		if(request.getParameter("accion").equals("guardar") && request.getParameter("ref")!=null){
			Libro lib=Utilidades.buscarLibro(request.getParameter("ref"),listaLibros);
			lib.referencia=request.getParameter("referencia");
			lib.autor=new Autor(request.getParameter("autor"));
			lib.titulo=request.getParameter("titulo");
			lib.genero=new Genero(request.getParameter("genero"));
			lib.fechaPublicacion=request.getParameter("fechapublicacion");
			
			request.getSession().getServletContext().setAttribute(AtributosConstantes.listaLibros.toString(), listaLibros);
			
			request.getRequestDispatcher("./adminLibros").forward(request, response);
		}
		
		
		writer.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}

}
